<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  

  
  <title>自建”稍后阅读“服务—— wallabag | ZHB&#39;s Blog</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="”稍后阅读“英文对应于 Read-It-Later，是指将碎片化信息中需要花时间仔细阅读思考或需要二次阅读消化的内容收集起来，待空余时间统一消化理解。国外这方面的知名应用服务商有 Pocket、 Instapaper 以及我之前一直使用的网速慢而且标签功能有 bug 的 Ioreader 等。由于国外服务商在国内网速较慢，而国内的也没找到附合心意的服务商，我选择自建服务 wallabag，运行在我">
<meta name="keywords" content="Server,Read-It-Later,折腾">
<meta property="og:type" content="article">
<meta property="og:title" content="自建”稍后阅读“服务—— wallabag">
<meta property="og:url" content="https://gkzhb.github.io/2019/04/wallabag/index.html">
<meta property="og:site_name" content="ZHB&#39;s Blog">
<meta property="og:description" content="”稍后阅读“英文对应于 Read-It-Later，是指将碎片化信息中需要花时间仔细阅读思考或需要二次阅读消化的内容收集起来，待空余时间统一消化理解。国外这方面的知名应用服务商有 Pocket、 Instapaper 以及我之前一直使用的网速慢而且标签功能有 bug 的 Ioreader 等。由于国外服务商在国内网速较慢，而国内的也没找到附合心意的服务商，我选择自建服务 wallabag，运行在我">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2019-04-03T16:10:43.707Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="自建”稍后阅读“服务—— wallabag">
<meta name="twitter:description" content="”稍后阅读“英文对应于 Read-It-Later，是指将碎片化信息中需要花时间仔细阅读思考或需要二次阅读消化的内容收集起来，待空余时间统一消化理解。国外这方面的知名应用服务商有 Pocket、 Instapaper 以及我之前一直使用的网速慢而且标签功能有 bug 的 Ioreader 等。由于国外服务商在国内网速较慢，而国内的也没找到附合心意的服务商，我选择自建服务 wallabag，运行在我">
  
    <link rel="alternate" href="/atom.xml" title="ZHB&#39;s Blog" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link rel="stylesheet" href="/css/sourcecodepro.css">
    <!-- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css"> -->
  
  <link rel="stylesheet" href="/css/style.css">
</head>
</html>
<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">ZHB&#39;s Blog</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://gkzhb.github.io"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-wallabag" class="article article-type-post" itemscope itemprop="blogPost">



  <div class="article-meta">
    <a href="/2019/04/wallabag/" class="article-date">
  <time datetime="2019-04-03T13:00:53.000Z" itemprop="datePublished">2019-04-03</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/Software/">Software</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      自建”稍后阅读“服务—— wallabag
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
		<!-- Table of Contents -->
		
			<div id="toc" class="toc-article">
				<strong class="toc-title">Table of Content</strong>
				<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#wallabag-官方文档"><span class="toc-number">1.</span> <span class="toc-text">wallabag 官方文档</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#环境安装"><span class="toc-number">2.</span> <span class="toc-text">环境安装</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#安装-php-世界上最好的语言"><span class="toc-number">2.1.</span> <span class="toc-text">安装 php （世界上最好的语言）</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#安装-composer"><span class="toc-number">2.2.</span> <span class="toc-text">安装 Composer</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#安装-php-extensions插件下面的-php7.0-要和自己的-php-版本对应"><span class="toc-number">2.3.</span> <span class="toc-text">安装 php extensions（插件），下面的 php7.0 要和自己的 php 版本对应</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#安装-mysql-服务器"><span class="toc-number">2.4.</span> <span class="toc-text">安装 Mysql 服务器</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#配置-mysql-服务器"><span class="toc-number">2.5.</span> <span class="toc-text">配置 mysql 服务器</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#安装-wallabag"><span class="toc-number">2.6.</span> <span class="toc-text">安装 wallabag</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#配置-nginx"><span class="toc-number">2.7.</span> <span class="toc-text">配置 Nginx</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#用户管理"><span class="toc-number">2.8.</span> <span class="toc-text">用户管理</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#参考"><span class="toc-number">3.</span> <span class="toc-text">参考</span></a></li></ol>
			</div>
		
        <p>”稍后阅读“英文对应于 <em>Read-It-Later</em>，是指将碎片化信息中需要花时间仔细阅读思考或需要二次阅读消化的内容收集起来，待空余时间统一消化理解。国外这方面的知名应用服务商有 Pocket、 Instapaper 以及我之前一直使用的网速慢而且标签功能有 bug 的 Ioreader 等。由于国外服务商在国内网速较慢，而国内的也没找到附合心意的服务商，我选择自建服务 wallabag，运行在我的阿里云 VPS（Virtual Private Server 虚拟专用服务器）上。</p>
<a id="more"></a>
<h2 id="wallabag-官方文档">wallabag 官方文档</h2>
<ul>
<li><a href="https://doc.wallabag.org/en/" target="_blank" rel="noopener">wallabag 官方文档</a></li>
</ul>
<p>主要安装过程参考上方 wallabag 官方文档的 <code>Installation</code> 一栏。</p>
<h2 id="环境安装">环境安装</h2>
<p>VPS 当然选择的是 Linux 系统，我使用的发行版是 Ubuntu。</p>
<p>注意以下命令行中 <code>$</code> 开头为普通用户执行的命令，<code>#</code> 开头表示命令需要以 <code>root</code> 权限运行。也就是说，如果是普通用户遇到 <code>#</code> 开头的命令，需要在命令前添加 <code>sudo</code> 执行。</p>
<h3 id="安装-php-世界上最好的语言">安装 php （世界上最好的语言）</h3>
<p>这里我安装的是 php7.0</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># apt-get install php</span></span><br></pre></td></tr></table></figure>
<h3 id="安装-composer">安装 Composer</h3>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># curl -s https://getcomposer.org/installer | php</span></span><br></pre></td></tr></table></figure>
<p>命令执行完后会在当前目录下生成一个 composer.phar 的文件，将其移动到 <code>/usr/local/bin</code> 并添加一个软链接到 <code>/usr/local/bin/composer</code>：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># mv composer.phar /usr/local/bin</span></span><br><span class="line"><span class="comment"># ln -s /usr/local/bin/composer.phar /usr/local/bin/composer</span></span><br></pre></td></tr></table></figure>
<h3 id="安装-php-extensions插件下面的-php7.0-要和自己的-php-版本对应">安装 php extensions（插件），下面的 php7.0 要和自己的 php 版本对应</h3>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># apt-get install php7.0-mysql php7.0-session php7.0-ctype php7.0-dom php7.0-hash php7.0-simplexml php7.0-json php7.0-gd php7.0-mbstring php7.0-xml php7.0-tidy php7.0-iconv php7.0-curl php7.0-gettext php7.0-tokenizer php7.0-bcmath</span></span><br></pre></td></tr></table></figure>
<p>其中会有一部分的包会安装出错，显示找不到，因为有的 php 插件集成在 <code>php7.0-common</code> 里。可以使用命令 <code>php -m</code> 查看已启用的插件。所以上面的命令参数中只需要尚未安装的 php 插件。</p>
<h3 id="安装-mysql-服务器">安装 Mysql 服务器</h3>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># apt-get install mysql-server # 安装 mysql 服务器</span></span><br></pre></td></tr></table></figure>
<p>详细配置可参考 <a href="https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-###-04" target="_blank" rel="noopener">How To Install MySQL on Ubuntu ###.04 | DigitalOcean</a></p>
<h3 id="配置-mysql-服务器">配置 mysql 服务器</h3>
<p>连接 mysql 服务器并为 wallabag 添加用户、创建数据库并添加权限</p>
<p>连接数据库：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ mysqld -u root -p</span><br></pre></td></tr></table></figure>
<p>之后在数据库中执行以下命令：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">CREATE DATABASE wallabag; -- 创建数据库 wallabag</span><br><span class="line">CREATE USER wallabag@localhost; -- 创建用户 wallabag 且只允许本地访问</span><br><span class="line">SET password FOR wallabag@localhost= PASSWORD(&quot;your-password&quot;); -- 修改 wallabag 用户的密码，将 your-password 换成需要的密码</span><br><span class="line">GRANT ALL PRIVILEGES ON wallabag.* TO wallabag@localhost IDENTIFIED BY &apos;your-password&apos;; -- 允许 wallabag 访问、修改数据库 wallabag 的权限</span><br><span class="line">FLUSH PRIVILEGES; -- 更新权限使之生效</span><br><span class="line">EXIT: -- 退出 mysql 数据库</span><br></pre></td></tr></table></figure>
<h3 id="安装-wallabag">安装 wallabag</h3>
<p>使用 git 获取 wallabag 代码：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> https://github.com/wallabag/wallabag.git</span><br></pre></td></tr></table></figure>
<p>不过考虑 GitHub 在国内网速较慢，可以考虑先将其导入到国内的代码仓库再从国内的代码托管平台上 clone 下来。下面的命令是从我的代码仓库克隆代码。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> https://gitee.com/gkzhb/wallabag.git</span><br></pre></td></tr></table></figure>
<p>获取代码之后，进入目录并编译：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> wallabag &amp;&amp; make install</span><br></pre></td></tr></table></figure>
<p>这一步，我在官网上和其他网站上看到的安装方式不同。<br>
在 Linuxbabe 网站上，我看到的教程是执行以下命令，而非上面的 <code>make install</code> 命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist</span><br></pre></td></tr></table></figure>
<p>不过，不论执行哪一个命令，最后都会出现以下内容需要我们填写：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">Creating the &quot;app/config/parameters.yml&quot; file</span><br><span class="line"> Some parameters are missing. Please provide them.</span><br><span class="line"> database_driver (pdo_sqlite): pdo_mysql</span><br><span class="line"> database_host (127.0.0.1): 127.0.0.1</span><br><span class="line"> database_port (null): 3306</span><br><span class="line"> database_name (symfony): wallabag</span><br><span class="line"> database_user (root): wallabag</span><br><span class="line"> database_password (null): your-password</span><br><span class="line"> database_path (&apos;%kernel.root_dir%/../data/db/wallabag.sqlite&apos;): /var/lib/mysql/wallabag</span><br><span class="line"> database_table_prefix (wallabag_): wallabag_</span><br><span class="line"> database_socket(null): Press Enter</span><br><span class="line"> domain_name (&apos;https://your-wallabag-url-instance.com&apos;): http://Your-Domain</span><br></pre></td></tr></table></figure>
<p>按照以上说明填写即可。<code>database_path</code> 我不太记得是填上面的内容还是只要填 <code>wallabag</code> 。注意如果搭建的 wallabag 网站使用的不是默认的 80 端口，需要在上面的 domain_name 上添加 <code>:[Port]</code> 也就是 <code>Your-Domain:[Port]</code>，将 <code>[Port]</code> 换成将要使用的端口。其它的设置可以默认直接 <code>Press Enter</code> 即直接按回车用默认值就好了。</p>
<p>这里又出现了一个不同，如果按照官网的做法使用 <code>make install</code> 此时应该即将完成安装，请继续看下面的内容。而如果使用 Linuxbabe 文章的做法，还需要执行以下命令来生成网站资源：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ php bin/console wallabag:install --env=prod</span><br></pre></td></tr></table></figure>
<p><code>--env=prod</code> 也可以换成 <code>-e prod</code> 表示编译生成生产环境。</p>
<p>接着两种方法都会又遇到一个配置 wallabag 的界面：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">Installing Wallabag...</span><br><span class="line"></span><br><span class="line">Step 1 of 5. Checking system requirements.</span><br><span class="line">+-----------------+--------+----------------+</span><br><span class="line">| Checked         | Status | Recommendation |</span><br><span class="line">+-----------------+--------+----------------+</span><br><span class="line">| PDO Driver      | OK!    |                |</span><br><span class="line">| curl_exec       | OK!    |                |</span><br><span class="line">| curl_multi_init | OK!    |                |</span><br><span class="line">+-----------------+--------+----------------+</span><br><span class="line">Success! Your system can run Wallabag properly.</span><br><span class="line"></span><br><span class="line">Step 2 of 5. Setting up database.</span><br><span class="line">It appears that your database already exists. Would you like to reset it? (y/N)n</span><br><span class="line">Creating schema</span><br><span class="line">Clearing the cache</span><br><span class="line"></span><br><span class="line">Step 3 of 5. Administration setup.</span><br><span class="line">Would you like to create a new admin user (recommended) ? (Y/n)y</span><br><span class="line">Username (default: wallabag) : your-admin-username</span><br><span class="line">Password (default: wallabag) : admin-pasword-here</span><br><span class="line">Email: admin-email-here</span><br><span class="line"></span><br><span class="line">Step 4 of 5. Config setup.</span><br><span class="line"></span><br><span class="line">Step 5 of 5. Installing assets.</span><br><span class="line"></span><br><span class="line">Wallabag has been successfully installed.</span><br><span class="line">Just execute `php bin/console server:run --env=prod` for using wallabag: http://localhost:8000</span><br></pre></td></tr></table></figure>
<p>输出内容可能有些不同，但是配置选项都是一样的。按照上面的提示输入 y 或 n 完成最后的安装。</p>
<p>然后移动 wallabag 目录位置：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># mv ../wallabag/ /usr/share/nginx/</span></span><br></pre></td></tr></table></figure>
<h3 id="配置-nginx">配置 Nginx</h3>
<p>这里我选择 Nginx 来运行 wallabag 网站，你也可以使用 Apache 之类的其它工具，在官网文档上有相关配置教程。</p>
<p>编辑配置文件：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># vim /etc/nginx/conf.d/wallabag.conf</span></span><br></pre></td></tr></table></figure>
<p>内容如下：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line">root@gkzhb:~/gitrep# cat /etc/nginx/conf.d/wallabag.conf</span><br><span class="line">server &#123;</span><br><span class="line">    # listen 8081; # 监听端口，如果要修改网站端口将这一行开头的 # 去掉并修改端口数值</span><br><span class="line">    server_name example.com;</span><br><span class="line">    root /usr/share/nginx/wallabag/web;</span><br><span class="line"></span><br><span class="line">    location / &#123;</span><br><span class="line">        # try to serve file directly, fallback to app.php</span><br><span class="line">        try_files $uri /app.php$is_args$args;</span><br><span class="line">    &#125;</span><br><span class="line">    location ~ ^/app\.php(/|$) &#123;</span><br><span class="line">        # if, for some reason, you are still using PHP 5,</span><br><span class="line">        # then replace /run/php/php7.0 by /var/run/php5</span><br><span class="line">        fastcgi_pass unix:/run/php/php7.0-fpm.sock;</span><br><span class="line">        fastcgi_split_path_info ^(.+\.php)(/.*)$;</span><br><span class="line">        include fastcgi_params;</span><br><span class="line">        # When you are using symlinks to link the document root to the</span><br><span class="line">        # current version of your application, you should pass the real</span><br><span class="line">        # application path instead of the path to the symlink to PHP</span><br><span class="line">        # FPM.</span><br><span class="line">        # Otherwise, PHP&apos;s OPcache may not properly detect changes to</span><br><span class="line">        # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126</span><br><span class="line">        # for more information).</span><br><span class="line">        fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;</span><br><span class="line">        fastcgi_param DOCUMENT_ROOT $realpath_root;</span><br><span class="line">        # Prevents URIs that include the front controller. This will 404:</span><br><span class="line">        # http://domain.tld/app.php/some-path</span><br><span class="line">        # Remove the internal directive to allow URIs like this</span><br><span class="line">        internal;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    # return 404 for all other php files not matching the front controller</span><br><span class="line">    # this prevents access to other php files you don&apos;t want to be accessible.</span><br><span class="line">    location ~ \.php$ &#123;</span><br><span class="line">        return 404;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    error_log /var/log/nginx/wallabag_error.log;</span><br><span class="line">    access_log /var/log/nginx/wallabag_access.log;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>这里的配置我大部份摘录自 <a href="https://doc.wallabag.org/en/admin/installation/virtualhosts.html" target="_blank" rel="noopener">wallabag doc</a></p>
<p>修改完成后执行命令重启 Nginx 服务：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># systemctl restart nginx</span></span><br></pre></td></tr></table></figure>
<p>之后可以在浏览器上访问 wallabag 网站了。</p>
<h3 id="用户管理">用户管理</h3>
<p>未完待续...</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://sspai.com/post/25336" target="_blank" rel="noopener">改变你的阅读方式：认识「稍后读」 - 少数派</a></li>
<li><a href="https://www.linuxbabe.com/arch/install-wallabag-arch-linux-server-nginx-mariadb-php7" target="_blank" rel="noopener">How to Install Wallabag on Arch Linux VPS with LEMP Stack - Linuxbabe</a></li>
<li><a href="https://stackoverflow.com/questions/24351260/how-to-check-which-php-extensions-have-been-enabled-disabled-in-ubuntu-linux-12" target="_blank" rel="noopener">How to check which PHP extensions have been enabled/disabled in Ubuntu Linux 12.04 LTS? - Stack Overflow</a></li>
<li><a href="https://stackoverflow.com/questions/13375061/installing-pdo-driver-on-mysql-linux-server" target="_blank" rel="noopener">php - Installing PDO driver on MySQL Linux server - Stack Overflow</a></li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://gkzhb.github.io/2019/04/wallabag/" data-id="cjx8qksqd0013nrw8heck3ujd" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Read-It-Later/">Read-It-Later</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Server/">Server</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/折腾/">折腾</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/2019/06/ankisyncd/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          Anki 自建同步服务器 ankisyncd
        
      </div>
    </a>
  
  
    <a href="/2019/03/ngrok/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">使用 ngrok 实现内网穿透（自建 ngrok 服务器）</div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Landscape/">Landscape</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Programming/">Programming</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Self-hosting/">Self-hosting</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Software/">Software</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/tags/Anki/">Anki</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Blog/">Blog</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Command-Line/">Command Line</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Data-Structure/">Data Structure</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Games/">Games</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Hometown/">Hometown</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Linux/">Linux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Network/">Network</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Read-It-Later/">Read-It-Later</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Recall/">Recall</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Regular-Expression/">Regular Expression</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Server/">Server</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Spring/">Spring</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/折腾/">折腾</a></li></ul>
    </div>
  </div>


  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2019 Haibin Zhang<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> -->

<!-- <script src="http://apps.bdimg.com/libs/jquery/2.0.3/jquery.min.js"></script> -->
<script src="/mathjax/MathJax.js?config=TeX-MML-AM_CHTML"></script>
<script src="/js/jquery.min.js"></script>

  <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  <script src="/fancybox/jquery.fancybox.pack.js"></script>


<script src="/js/script.js"></script>




  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
		messageStyle: "none",
		showProcessingMessages: false,
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<!-- <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> -->
<script src="/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

</body>
</html>